package com.pacifico.telebusca.web.controladores;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.pacifico.telebusca.dominio.Audio;
import com.pacifico.telebusca.dominio.Empresa;
import com.pacifico.telebusca.dominio.UsuarioEmpresa;
import com.pacifico.telebusca.exception.Errores;
import com.pacifico.telebusca.web.facade.TeleBuscaFacade;
import com.pacifico.telebusca.web.util.Util;

@Controller
public class ControladorMenu {

	private static Logger logger = Logger.getLogger(ControladorMenu.class);
	
	@Value("#{telebusca['rangodias']}")
	private String rangodias;
	
	@Autowired
	private TeleBuscaFacade teleBuscaFacade;
	
	@Value("#{telebusca['maximofilas']}")
	private String maxNumber;

	@RequestMapping(value = "/acceso", method = RequestMethod.GET)
	public ModelAndView acceso(ModelMap model) {
		logger.info(" Ingresando pagina acceso ");
		return new ModelAndView("acceso");

	}

	@RequestMapping(value = "/menu", method = RequestMethod.GET)
	public ModelAndView menu(ModelMap model) {
		logger.info(" Ingresando pagina menu ");
		return new ModelAndView("menu");

	}
	
	@RequestMapping(value = "/error", method = RequestMethod.GET)
	public String error(ModelMap model) {		
		return "error";

	}
	
	
	@RequestMapping(value = "/error500", method = RequestMethod.GET)
	public ModelAndView error500(ModelMap model) {
		logger.info(" Ingresando pagina error 500");
		return new ModelAndView("error500");

	}
	
	@RequestMapping(value = "/error404", method = RequestMethod.GET)
	public ModelAndView error404(ModelMap model) {
		logger.info(" Ingresando pagina error 404");
		model.addAttribute("error", Errores.MAP.get("E0000"));
		return new ModelAndView("error404");

	}

	@RequestMapping(value = "/importaraudios", method = RequestMethod.GET)
	public ModelAndView importaraudios(ModelMap model) {
		logger.info(" Ingresando pagina importar audios ");
		return new ModelAndView("importaraudios");

	}

	@RequestMapping(value = "/consultaraudio", method = RequestMethod.GET)
	public ModelAndView consultaraudio(Model map) {
		logger.info(" Ingresando pagina consultar audios ");
		ModelAndView mav = new ModelAndView("consultaraudios");
		try {
			List<Empresa> empresas = teleBuscaFacade
					.listarUsuariosyEmpresasByNombreUsuario(Util
							.obtenerNombreUsuario(SecurityContextHolder
									.getContext()));
			mav.addObject("empresas", empresas);

			mav.addObject("audio", new Audio());
			mav.addObject("rangodias", rangodias);			
		} catch (Exception e) {			
			e.printStackTrace();
			
			if (e.getCause()!=null){
				if (e.getCause().getCause()!=null){
					if(!e.getCause().getCause().getMessage().equals("")){
						if(e.getCause().getCause().getMessage().contains("Cannot release connection")|| 
								e.getCause().getCause().getMessage().contains("Cannot open connection")||
								e.getCause().getCause().getMessage().contains("JDBC rollback failed")){
							mav.addObject("error", Errores.MAP.get("E0002"));				
							return mav;
						}
					}
				}	
			}
			map.addAttribute("error", "Error Al Cargar el combo "
					+ e.getMessage());			
			return mav;
			
		}

		return mav;
	}

	@RequestMapping(value = "/mantenimientoempresa", method = RequestMethod.GET)
	public ModelMap mantenimientoempresa(ModelMap modelMap) {
		logger.info(" Ingresando pagina mantenimiento empresa ");
		ModelMap mav = new ModelMap("mantenimientoempresa");
		List<Empresa> empresas = null;
		try {
			int total = teleBuscaFacade.buscarContarEmpresas();
			empresas = teleBuscaFacade.buscarEmpresas(0, total);			
			if (empresas == null || empresas.isEmpty()){
				mav.addAttribute("mensajeempresa", Errores.MAP.get("E3001"));	
			}
			mav.addAttribute("maxNumber", Integer.valueOf(maxNumber));
				
		} catch (Exception e) {			
			if (e.getCause()!=null){
				if (e.getCause().getCause()!=null){
					if(!e.getCause().getCause().getMessage().equals("")){
						if(e.getCause().getCause().getMessage().contains("Cannot release connection") || 
								e.getCause().getCause().getMessage().contains("Cannot open connection")||
								e.getCause().getCause().getMessage().contains("JDBC rollback failed")){
							mav.addAttribute("error", Errores.MAP.get("E0002"));				
							return mav;
						}
					}
				}	
			}
			mav.addAttribute("error", " Error al cargar la empresas " + e.getMessage());
			return mav;
		}
		mav.addAttribute("empresas", empresas);

		return mav;

	}

	@RequestMapping(value = "/mantenimientousuarioempresa", method = RequestMethod.GET)
	public ModelAndView mantenimientousuarioempresa(ModelMap model) {
		logger.info(" Ingresando pagina mantenimiento empresa usuario ");
		ModelAndView mav = null;
		List<UsuarioEmpresa> usuariosEmpresas = null;
		try {
			mav = new ModelAndView("mantenimientousuarioempresa");
			int total = teleBuscaFacade.buscarContarUsuarioEmpresas();
			usuariosEmpresas = teleBuscaFacade.buscarUsuarioEmpresas(0, total);
			mav.addObject("usuariosEmpresas", usuariosEmpresas);
			mav.addObject("empresasnombres", teleBuscaFacade.listarEmpresas());
			mav.addObject("maxNumber", Integer.valueOf(maxNumber));
			if (usuariosEmpresas == null || usuariosEmpresas.isEmpty()){
				mav.addObject("mensajeempresausuario", Errores.MAP.get("E3001"));	
			}
		} catch (Exception e){	
			e.printStackTrace();
			
			if (e.getCause()!=null){
				if (e.getCause().getCause()!=null){
					if(!e.getCause().getCause().getMessage().equals("")){
						if(e.getCause().getCause().getMessage().contains("Cannot release connection")|| 
								e.getCause().getCause().getMessage().contains("Cannot open connection")||
								e.getCause().getCause().getMessage().contains("JDBC rollback failed")){
							mav.addObject("error", Errores.MAP.get("E0002"));
							return mav;
						}
					}
				}	
			}
			mav.addObject("error", " Error al cargar la empresas " + e.getMessage());
			return mav;
		}
		return mav;

	}
}
